package com.ruoyi.system.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Getter;
import lombok.Setter;

import javax.validation.Valid;
import java.util.Date;
import java.util.List;


@Setter
@Getter
public class MaterialsOriginalVO {

    /**
     * id
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /**
     * 单据编号
     */
    private String code;

    /**
     * 引用单据编号;引用单据编号，避免嵌套查询加入的冗余字段
     */
    private String parentCode;

    /**
     * 父id;父id，一般用于调拨等
     */
    private Long parentId;

    /**
     * 数据来源;0、未知  1、PC  2、APP
     */
    private String sourceType;

    /**
     * 物资收发类型;磅单类型 1、地磅收料 2、地磅发料  3、直入直出 4、移动收料 5、移动发料
     */
    private Integer type;

    /**
     * 类型用途;类型用途 1、采购 2、调入 3、甲供 4、退货 5、发料 6、调出 7、退料
     */
    private Integer typeUse;

    /**
     * 收料单位编码;社会统一信用代码
     */
    private String receivingUnitCode;

    /**
     * 收料单位_names;收料单位名称
     */
    private String receivingUnitName;

    /**
     * 收料单位备注;收料单位备注，127个汉字
     */
    private String receivingUnitRemark;

    /**
     * 发料单位编码;社会统一信用代码
     */
    private String issueUnitCode;

    /**
     * 发料单位名称;发料单位名称
     */
    private String issueUnitName;

    /**
     * 发料单位备注;发料单位备注，127个汉字
     */
    private String issueUnitRemark;

    /**
     * 收料单位类型; 1、施工队伍 2、项目部 3、架子队
     */
    private Integer receivingUnitType;

    /**
     * 库房id;对应物资系统id，此id不可靠，仅做冗余
     */
    private Integer storageId;

    /**
     * 库房编码;对应物资系统dicStoreroomCode字段
     */
    private String storageCode;

    /**
     * 库房;存放地点
     */
    private String storageName;

    /**
     * 车牌号
     */
    private String licensePlate;

    /**
     * 收料员ID
     */
    private Integer materialmanId;

    /**
     * 收料员;第一版为空，第二版为中铁的员工名称
     */
    private String materialman;

    /**
     * 收料员类型;1.HR系统 2.临时账户
     */
    private String materialmanType;

    /**
     * 发料员ID
     */
    private String issuePersonnelId;

    /**
     * 发料员
     */
    private String issuePersonnelName;

    /**
     * 发料员类型
     */
    private Integer issuePersonnelType;

    /**
     * 使用部位编码
     */
    private String partUsedCode;

    /**
     * 使用部位_名称
     */
    private String partUsedName;

    /**
     * 使用部位工程编码
     */
    private String partProjectCode;

    /**
     * 合同编码
     */
    private String contractCode;

    /**
     * 合同名称
     */
    private String contractName;

    /**
     * 使用部位工程组织树id
     */
    private String partOrgId;

    /**
     * 所属工程项目code;hr-orgCode
     */
    private String orgCode;

    /**
     * 拌合站编码;仅地磅，用于区分具体的拌合站
     */
    private String mixingPlantCode;

    /**
     * 拌合站名称;仅地磅，用于区分具体的拌合站
     */
    private String mixingPlantName;

    /**
     * 入场时间;仅地磅
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String enterTime;

    /**
     * 出场时间;仅地磅
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String exitTime;

    /**
     * 毛重时间;仅地磅
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String roughTime;

    /**
     * 皮重时间;仅地磅
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String tareTime;

    /**
     * 净重时间;仅地磅
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String realTime;

    /**
     * 状态;0、未提交 1、已提交 2、已对账
     */
    private String status;

    /**
     * 单据状态;0.正常  1.补录
     */
    private String documentStatus;

    /**
     * 单据时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String documentTime;

    /**
     * 所属工程项目id
     */
    private Long billOrgId;

    /**
     * 所属工程项目名称
     */
    private String billOrgName;

    /**
     * 所属工程项目treepath
     */
    private String billOrgTreepath;

    /**
     * 备注;限制500个字符，250个汉字
     */
    private String remark;

    /**
     * 创建者id
     */
    private String creatorId;

    /**
     * 创建者;对于地磅，此处对应的是拌合站编码；
     */
    private String creator;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新人id
     */
    private String modifierId;

    /**
     * 更新人
     */
    private String modifier;
    /**
     * 删除标志;0.未删除 1.已删除
     */
    private String deleted;
    /**
     * 供货计划id
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long planId;
    private String planStatus;
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long driverId;
    private String driverName;
    private String driverPhone;
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long headId;
    private String headName;
    private String virtual;
    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 材料记录集合
     */
    @Valid
    private List<MaterialsOriginalRecordVO> records;


    /**
     * 打印记录集合
     */
    private List<MaterialsOriginalPrintVO> prints;


    /**
     * 附件集合
     */
    private List<MaterialsOriginalAccessoryVO> accessorys;
}
